--在这里实现代理登录
local json = require "cjson.safe"
local jwt = require "resty.jwt"
local http = require "resty.http"

json.encode_empty_table_as_object(false)
--https://zhuanlan.zhihu.com/p/67904411?utm_id=0
-- local chunk, eof = ngx.arg[1], ngx.arg[2]

-- -- 定义全局变量，收集全部响应
-- if ngx.ctx.buffered == nil then
--     ngx.ctx.buffered = {}
-- end

-- -- 如果非最后一次响应，将当前响应赋值
-- if chunk ~= "" and not ngx.is_subrequest then
--     table.insert(ngx.ctx.buffered, chunk)

--     -- 将当前响应赋值为空，以修改后的内容作为最终响应
--     ngx.arg[1] = nil
-- end

-- -- 如果为最后一次响应，对所有响应数据进行处理
-- if eof then
--     -- 获取所有响应数据
--     local whole = table.concat(ngx.ctx.buffered)

    
--     ngx.ctx.buffered = nil

--     -- 进行你所需要进行的处理
--     -- whole = todo
--     ngx.log(ngx.ERR,"seaweed 返回的原始数据是\r\n")
--     ngx.log(ngx.ERR,whole)

--     local temp = json.decode(whole);
--     temp.ta = "fuck"
--     ngx.log(ngx.ERR,"seaweed 返回的数据是\r\n")
--     ngx.log(ngx.ERR,json.encode(temp))


--      whole = table.concat(temp)

--     -- 重新赋值响应数据，以修改后的内容作为最终响应
--     ngx.arg[1] = whole
-- end

-- https://blog.csdn.net/fy_sun123/article/details/79559086
local function res_json()
    local res = {
        Data={},
        Error={Message="附件大小超出限制"},
        ErrorSrc="",
        ErrorCode="",
        IsPositive=false
    }
    return json.encode(res)
end
local status = ngx.var.status
local chunk, eof = ngx.arg[1], ngx.arg[2] -- 获取当前的流 和是否时结束
local info = ngx.ctx.buf
chunk = chunk or ""
if info then
    ngx.ctx.buf = info .. chunk -- 这个可以将原本的内容记录下来
else
    ngx.ctx.buf = chunk
end
if eof then
    ngx.ctx.buffered = nil
    if status == 413 or status == "413" then -- 413是nginx request body 超过限制时的状态吗
        ngx.arg[1] = res_json() -- 这个是你期待输出的内容
    else
        -- log(ERR,  ngx.ctx.buf)
        local temp = json.decode(ngx.ctx.buf)
        -- 可以在上个请求中放一点信息 代理请求整理后一并返回客户端
        temp.ta = ngx.var.target_url
        ngx.arg[1] = json.encode(temp)
    end
else
    ngx.arg[1] = nil -- 这里是为了将原本的输出不显示
end

